function gewFireEmitter(gl)
{
  gewEmitter.call(this, gl, GEW_PS_SPRITE2D);
  
  // Fire Emitter properties
}
extend2(gewFireEmitter, gewEmitter);
/*
 * in_particle_param = {
 *                       minLife,maxLife,
 *                       velocityLengthMin,
 *                       velocityLengthMax,
 *                       minStartTime,maxStartTime,
 *                       gravity,
 *                       minAxialForceFactor,axialForceScale,
 *                       minSize,maxSize,
 *                       color
 *                     }
 */
gewFireEmitter.prototype.genMainFireParticle = function(in_out_pos_life, out_veloc_time, out_accel_size,out_color,in_particle_param)
{
  // Life 
  var rand_f = Math.random();
  var life = gewMix(in_particle_param.minLife,in_particle_param.maxLife,rand_f);
  // Velocity 
  var rand_f0 = Math.random()+0.01 -0.5; // avoid vec3(0,0,0) case
  var rand_f1 = Math.abs(Math.random() - 0.5);
  var rand_f2 = Math.random() - 0.5;
  var rand_vec = gewRegVec0;
  rand_vec.set(rand_f0,rand_f1,rand_f2);
  rand_vec.normalize();
  var velocity = gewRegVec1;
  rand_f = Math.random();
  var veloc_length = gewMix(in_particle_param.velocityLengthMin,in_particle_param.velocityLengthMax,rand_f);
  rand_vec.mulScalar(veloc_length,velocity);
  // Time 
  rand_f = Math.random();
  var time = gewMix(in_particle_param.minStartTime,in_particle_param.maxStartTime,rand_f);
  
  // accel
  var gravity = in_particle_param.gravity;
  var accel = gravity.dup();
  rand_f = Math.random();
  var axial_force_factor = gewMix(in_particle_param.minAxialForceFactor,1.0,rand_f);
  var axialForceScale = in_particle_param.axialForceScale;
  accel.x = accel.x+ axial_force_factor* (-velocity.x)*axialForceScale;
  accel.z = accel.z+ axial_force_factor* (-velocity.z)*axialForceScale;
  // Size 
  var rand_f = Math.random();
  var size = gewMix(in_particle_param.minSize,in_particle_param.maxSize,rand_f);
  
  // Color 
  var color = in_particle_param.color;
  // Write ouput
  in_out_pos_life.w = life;
  out_veloc_time.set(velocity.x,velocity.y,velocity.z,time);
  out_accel_size.set(accel.x,accel.y,accel.z,size);  
  out_color.set(color.x,color.y,color.z,color.w);
}
gewFireEmitter.prototype.createFireAtPoints = function(par_per_point,position_array,par_param)
{  
  var isOk = this.addParticleByPoints(par_per_point*position_array.length, position_array, this.genMainFireParticle,par_param);
}
